////////////////////////////////////////////////////////////////////
// Programme d'extraction de vidéo pour Chrono Cross
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// Nemesis pour Terminus Traduction (tt_nemesis@yahoo.fr)
// Date de création :		18/07/04
// Dernière modification :	18/07/04
////////////////////////////////////////////////////////////////////

// Inclusions
#include <stdio.h>
#include <stdlib.h>

#define SECT	2048
#define SPF		8
#define EXT_IN	"str"
#define EXT_OUT	"vid"

void main(int argn, char *argv[])
{
	// Fichiers
	FILE *in_f,*out_f;
	// Nom du fichier
	char fich_nom[100];
	// Donnees de copie
	char buffer[2048];
	// Numéro de secteur
	int sec;
	// Frames
	int frame_i, frame_f;

	// Paramètres
	if (argn<4) {
		printf("Utilisation : %s <nom fichier sans extension>"
			" <frame de depart> <frame de fin>\n",argv[0]);
		getchar();
		return;
	}
	frame_i = atoi(argv[2])-1;
	frame_f = atoi(argv[3]);

	// Ouverture du fichier à traiter
	sprintf(fich_nom,"%s.%s",argv[1],EXT_IN);
	in_f=fopen(fich_nom,"rb");
	// Test d'ouverture
	if (in_f==NULL) {
		printf("Erreur d'ouverture de %s.\n",fich_nom);
		getchar();
		return;
	}

	// Ouverture en sortie
	sprintf(fich_nom,"%s.%s",argv[1],EXT_OUT);
	out_f=fopen(fich_nom,"wb");
	// Copie du fichier
	fseek(in_f,SECT*SPF*frame_i,SEEK_SET);
	for(sec=frame_i*SPF;sec<frame_f*SPF;sec++) {
		if (fread(buffer,sizeof(char),SECT,in_f)!=SECT) {
			printf("Erreur de lecture du secteur %d.\n",sec);
			getchar();
			return;
		}
		fwrite(&buffer,sizeof(char),SECT,out_f);
	}
	// Fermeture du fichier
	fclose(out_f);
	fclose(in_f);

	printf("Extraction reussie\n");
	getchar();
}